/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2007，所有权利保留。
 * 
 * 项目名：	rumba
 * 文件名：	BMscbOrder.java
 * 模块说明：	
 * 修改历史：
 * Oct 30, 2007 - lxm - 创建。
 */
package com.hd123.rumba.mscb.order.biz;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.hd123.rumba.exception.BusinessException;
import com.hd123.rumba.mscb.order.IMscbOrder;
import com.hd123.rumba.mscb.order.IMscbOrderPrompt;
import com.hd123.rumba.mscb.subscriber.Subscriber;
import com.hd123.rumba.runtime.IPersistent;
import com.hd123.rumba.runtime.biz.BBaseEntity;

/**
 * 消息订阅单 | 业务层.维护 | 实体
 * 
 * @author lxm
 * 
 */
public class BMscbOrder extends BBaseEntity {

  private String subjectClass;
  private String event;
  private String constraintContext;
  private String constraintDesc;
  private String constraintClassName;
  private Subscriber subscriber;
  private String note;
  private String flag;
  private Date subscribeTime;
  private List<BMscbOrderPrompt> prompts;

  public void readFrom(IPersistent source) throws BusinessException {
    super.readFrom(source);
    if (source instanceof IMscbOrder) {
      this.subjectClass = ((IMscbOrder) source).getSubjectClass();
      this.event = ((IMscbOrder) source).getEvent();
      this.constraintContext = ((IMscbOrder) source).getConstraintContext();
      this.constraintDesc = ((IMscbOrder) source).getConstraintDesc();
      this.constraintClassName = ((IMscbOrder) source).getConstraintClassName();
      this.subscriber = ((IMscbOrder) source).getSubscriber();
      this.note = ((IMscbOrder) source).getNote();
      this.flag = ((IMscbOrder) source).getFlag();
      this.subscribeTime = ((IMscbOrder) source).getSubscribeTime();

      this.prompts = new ArrayList<BMscbOrderPrompt>();
      for (IMscbOrderPrompt pp : ((IMscbOrder) source).getPrompts()) {
        BMscbOrderPrompt bp = new BMscbOrderPrompt();
        bp.readFrom(pp);
        this.prompts.add(bp);
      }
    }
  }

  /**
   * 根据uuid取得提醒明细对象。
   * 
   * @param uuid
   *          指定的提醒明细的uuid。不可为null。
   * @return 返回符合条件的提醒明细对象，若找不到则返回null。
   * @throws BusinessException
   */
  public BMscbOrderPrompt getPromptByUuid(String uuid) throws BusinessException {
    assert uuid != null;
    BMscbOrderPrompt p = null;
    for (BMscbOrderPrompt p2 : this.prompts)
      if (uuid.equals(p2.getUuid())) {
        p = p2;
        break;
      }
    return p;
  }

  /** 约束条件解释器类名 */
  public String getConstraintClassName() {
    return constraintClassName;
  }

  public void setConstraintClassName(String constraintClassName) {
    this.constraintClassName = constraintClassName;
  }

  /** 约束条件上下文 */
  public String getConstraintContext() {
    return constraintContext;
  }

  public void setConstraintContext(String constraintContext) {
    this.constraintContext = constraintContext;
  }

  /** 约束条件描述 */
  public String getConstraintDesc() {
    return constraintDesc;
  }

  public void setConstraintDesc(String constraintDesc) {
    this.constraintDesc = constraintDesc;
  }

  /** 事件 */
  public String getEvent() {
    return event;
  }

  public void setEvent(String event) {
    this.event = event;
  }

  /** 标记。 */
  public String getFlag() {
    return flag;
  }

  public void setFlag(String flag) {
    this.flag = flag;
  }

  /** 附言 */
  public String getNote() {
    return note;
  }

  public void setNote(String memo) {
    this.note = memo;
  }

  /** 提醒明细列表 */
  public List<BMscbOrderPrompt> getPrompts() {
    return prompts;
  }

  public void setPrompts(List<BMscbOrderPrompt> prompts) {
    this.prompts = prompts;
  }

  /**
   * 订阅主题类型
   * <p>
   * 
   * 当前订阅所针对的主题类型，即标志消息源的订阅主题的类名。
   */
  public String getSubjectClass() {
    return subjectClass;
  }

  public void setSubjectClass(String subjectClass) {
    this.subjectClass = subjectClass;
  }

  /** 订阅者。存在用户与角色两种可能性。 */
  public Subscriber getSubscriber() {
    return subscriber.clone();
  }

  public void setSubscriber(Subscriber subscriber) {
    this.subscriber = subscriber.clone();
  }

  /** 订阅时间。 */
  public Date getSubscribeTime() {
    return subscribeTime;
  }

  public void setSubscribeTime(Date subscribeTime) {
    this.subscribeTime = subscribeTime;
  }

}
